Mapped Types
その後のversionでも拡張が加えられている
型レベル関数
用語など
{ [P in K]: T } と書いた場合に
P
parameter type
unionであるKの1つ1つに対し、propertyを作る感じになる
Pは、ここで定義される型変数
:の右側で使用できる
e.g. { [P in K]: T[P] }
K
constraint type
以下を満たす必要がある
string | number | symbolの部分型である
1個以上のunion型である
T
template type
type Element<P extends K> = T;と似ている
関連
?やreadonlyの付与や除去をする
関連2
参考
T[K]
Kは、K extends keyof Tを満たしている必要がある
code:TypeScript
type Person = { name: string; age: number; };
type A = Person'name'; // string symbolを使った例
code:ts
const S = Symbol('S');
// { hoge: number, S: number } type A = Record<'hoge' | typeof S, number>;
code:ts
type A = Record<'hoge' | symbol, number>;
code:ts
const S = Symbol('S');
type A = Record<'hoge' | typeof S | symbol, number>;